#pragma once

#include <stdio.h>
#include <iostream>
#include <vector>

// Include OpenCV's C++ Interface
#include "opencv2/opencv.hpp"

#include "OpenCVSample0.h"
#include "createmask.h"
#include "libICA.h"
#include "decomposition.h"


using namespace cv;
using namespace std;

#define GRAY_PROCESS 1
#define CARTOON_PROCESS 2
#define SKIN_BEAUTY_PROCESS 3

/**
 * the interface of the jni
 * @param 
 * @return
 */
void openCVGraphic(int width, int height, Mat bgraBitmap, Mat bgraBitmapOut, int flag, int param);

/**
 * make the image gray
 * @param 
 * @return
 */
void grayImage(int width, int height, Mat bgraBitmap, Mat bgraBitmapOut);

/**
 * Convert the given photo into a cartoon-like or painting-like image.
 * Set sketchMode to true if you want a line drawing instead of a painting.
 * Set alienMode to true if you want alien skin instead of human.
 * Set evilMode to true if you want an "evil" character instead of a "good" character.
 * Set debugType to 1 to show where skin color is taken from, and 2 to show the skin mask in a new window (for desktop).
 * @param 
 * @return
 */

void cartoonifyImage(Mat srcColor, Mat dst, bool sketchMode, bool alienMode, bool evilMode, int debugType);


// Draw an anti-aliased face outline, so the user knows where to put their face.
void drawFaceStickFigure(Mat dst);
void changeFacialSkinColor(Mat smallImgBGR, Mat bigEdges, int debugType);
void removePepperNoise(Mat &mask);
void drawFaceStickFigure(Mat dst);

